# -*- coding: utf-8 -*-

"""
  @author: tangliqi
  @date: 2022/7/4 22:33
  @python version: 3.6 
  
  ---------------------------------------
  @desc: python设计模式实现 => 原型模式.py
"""
import copy


# 通过一个广东省下的市的例子来实现原型模式的讲解
# 每一个省下都有很多个市
# 这些市共享相同的一些属性(属于同样的省)，不用每次实例化市的对象时重复创建共享的省属性

class GuangDongProperty:
    def __init__(self):
        self.name = "GuangDong"
        self.loc = "south east"
        self.pro_area = "xxxx cubic meters"


# ============================  实现一个浅拷贝原型模式  ============================
class CityProtoType:
    def __init__(self, obj):
        self.obj = obj()

    def clone(self, **city_dict):
        obj = copy.copy(self.obj)
        obj.__dict__.update(city_dict)
        return obj


# ============================  实现一个深拷贝原型模式  ============================
class CityProtoTypeDeepCopy:
    def __init__(self, obj):
        self.obj = obj()

    def clone(self, **city_dict):
        obj = copy.deepcopy(self.obj)
        obj.__dict__.update(city_dict)
        return obj
